package com.tansuo365.test1.service.kucunservice.kucunimpl;

import com.tansuo365.test1.bean.kucunbean.*;
import com.tansuo365.test1.mapper.kucunmapper.*;
import com.tansuo365.test1.service.kucunservice.WuliaoKucunRiZhiService;
import com.tansuo365.test1.util.StringUtil;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.List;

@Service
public class WuliaoKucunRiZhiServiceImpl implements WuliaoKucunRiZhiService {

    @Resource
    private WuliaoKucunRiZhiMapper wuliaoKucunRiZhiMapper;
    @Resource
    private DaohuoDetailsMapper daohuoDetailsMapper;
    @Resource
    private DaohuoZongMapper daohuoZongMapper;
    @Resource
    private ChukuDetailsMapper chukuDetailsMapper;
    @Resource
    private ChukuZongMapper chukuZongMapper;
    @Resource
    private WeixiuDetailsMapper weixiuDetailsMapper;
    @Resource
    private WeixiuZongMapper weixiuZongMapper;
    @Resource
    private PosunZongMapper posunZongMapper;
    @Resource
    private PosunDetailsMapper posunDetailsMapper;
    @Resource
    private TuikuZongMapper tuikuZongMapper;
    @Resource
    private TuikuDetailsMapper tuikuDetailsMapper;

    @Override
    public List<WuliaoKucunRiZhi> getKucunRiZhiSelective(WuliaoKucunRiZhi wuliaoKucunRiZhi) {
        return wuliaoKucunRiZhiMapper.getKucunRiZhiSelective(wuliaoKucunRiZhi);
    }

    @Override
    public int deleteByPrimaryKey(Integer id) {
        return wuliaoKucunRiZhiMapper.deleteByPrimaryKey(id);
    }

    @Override
    public int insertSelective(WuliaoKucunRiZhi wuliaoKucunRiZhi) {
        return wuliaoKucunRiZhiMapper.insertSelective(wuliaoKucunRiZhi);
    }

    @Override
    @Transactional
    public int insertButDeleteDaohuoShu(Integer[] ids) {
        int inSertRizhi = 0;
        int i = 0;
        for (Integer id : ids) {
            List<DaohuoDetails> daohuoDetailsList = daohuoDetailsMapper.listDaohuoDetailsByZongId(id);
            DaohuoZong daohuoZong = daohuoZongMapper.selectByPrimaryKey(id);
            for (DaohuoDetails daohuoDetails : daohuoDetailsList) {
                //获取每一个到货详细中的数据填充到wuliaokucunrizhi实例中
                i++;
                WuliaoKucunRiZhi wuliaoKucunRiZhi = new WuliaoKucunRiZhi();
                wuliaoKucunRiZhi.setMingchengguige(daohuoDetails.getMingchengguige());
                wuliaoKucunRiZhi.setXiangmuweihu(daohuoZong.getXiangmumingcheng());
                wuliaoKucunRiZhi.setShourushuliang(-daohuoDetails.getDaohuoshuliang());
                wuliaoKucunRiZhi.setJiagongyigong(daohuoDetails.getJiagongyigong());
                wuliaoKucunRiZhi.setDanwei(daohuoDetails.getDanwei());
                wuliaoKucunRiZhi.setWuliaobianma(daohuoDetails.getWuliaobianma());
                wuliaoKucunRiZhi.setDalei(daohuoDetails.getDalei());
                wuliaoKucunRiZhi.setRukukufang(daohuoZong.getRukukufang());
                inSertRizhi += wuliaoKucunRiZhiMapper.insertSelective(wuliaoKucunRiZhi);
            }
        }
        if ((i == inSertRizhi) && (inSertRizhi > 0)) {
            return inSertRizhi;
        } else if ((inSertRizhi > 0) && (i != inSertRizhi)) {
            return -1;
        } else {
            return 0;
        }
    }

    @Override
    @Transactional
    public int insertButDeleteChukuShu(Integer[] ids) {
        int inSertRizhi = 0;
        int i = 0;
        for (Integer id : ids) {
            List<ChukuDetails> chukuDetailsList = chukuDetailsMapper.listChukuDetailsByZongId(id);
            ChukuZong chukuZong = chukuZongMapper.selectByPrimaryKey(id);
            for (ChukuDetails chukuDetails : chukuDetailsList) {
                i++;
                WuliaoKucunRiZhi wuliaoKucunRiZhi = new WuliaoKucunRiZhi();
                wuliaoKucunRiZhi.setMingchengguige(chukuDetails.getMingchengguige());
                wuliaoKucunRiZhi.setXiangmuweihu(chukuZong.getXiangmumingcheng());
                wuliaoKucunRiZhi.setFachushuliang(-chukuDetails.getChukushuliang()); //今天不发出,明天必发出
                wuliaoKucunRiZhi.setDanwei(chukuDetails.getDanwei());
                wuliaoKucunRiZhi.setWuliaobianma(chukuDetails.getWuliaobianma());
                wuliaoKucunRiZhi.setDalei(chukuDetails.getDalei());
                wuliaoKucunRiZhi.setRukukufang(chukuZong.getChkukufang());
                inSertRizhi += wuliaoKucunRiZhiMapper.insertSelective(wuliaoKucunRiZhi);
            }
        }
        if ((i == inSertRizhi) && (inSertRizhi > 0)) {
            return inSertRizhi;
        } else if ((inSertRizhi > 0) && (i != inSertRizhi)) {
            return -1;
        } else {
            return 0;
        }
    }

    @Override
    @Transactional
    public int insertAndDeletePosunOrWeixiuShu(Integer[] ids, String type) {
        int inSertRizhi = 0;
        int i = 0;
        for (Integer id : ids) {
            if (type.equals("weixiudan")) {
                List<WeixiuDetails> weixiuDetailsList = weixiuDetailsMapper.listWeixiuDetailsByZongId(id);
                WeixiuZong weixiuZong = weixiuZongMapper.selectByPrimaryKey(id);
                for (WeixiuDetails weixiuDetails : weixiuDetailsList) {
                    i++;
                    WuliaoKucunRiZhi wuliaoKucunRiZhi = new WuliaoKucunRiZhi();
                    wuliaoKucunRiZhi.setMingchengguige(weixiuDetails.getMingchengguige());
                    wuliaoKucunRiZhi.setXiangmuweihu(weixiuZong.getXiangmumingcheng());
                    /**
                     * 这里删除了或者恢复了维修单,那么维修数量在原本基础上变为 -维修数量
                     * 例如原本的维修数量2,那么这里设置维修数量-2,即2-2为0在物料库存日志中类似取消的作用
                     */
                    wuliaoKucunRiZhi.setWeixiushuliang(-weixiuDetails.getChukushuliang());
                    wuliaoKucunRiZhi.setDanwei(weixiuDetails.getDanwei());
                    wuliaoKucunRiZhi.setWuliaobianma(weixiuDetails.getWuliaobianma());
                    wuliaoKucunRiZhi.setDalei(weixiuDetails.getDalei());
                    wuliaoKucunRiZhi.setRukukufang(weixiuZong.getMorenkufang());
                    inSertRizhi += wuliaoKucunRiZhiMapper.insertSelective(wuliaoKucunRiZhi);
                }
            } else if (type.equals("posundan")) {
                List<PosunDetails> posunDetailsList = posunDetailsMapper.listPosunDetailsByZongId(id);
                PosunZong posunZong = posunZongMapper.selectByPrimaryKey(id);
                for (PosunDetails posunDetails : posunDetailsList) {
                    i++;
                    WuliaoKucunRiZhi wuliaoKucunRiZhi = new WuliaoKucunRiZhi();
                    wuliaoKucunRiZhi.setMingchengguige(posunDetails.getMingchengguige());
                    wuliaoKucunRiZhi.setXiangmuweihu(posunZong.getXiangmumingcheng());
                    wuliaoKucunRiZhi.setPosunshuliang(-posunDetails.getChukushuliang());
                    wuliaoKucunRiZhi.setDanwei(posunDetails.getDanwei());
                    wuliaoKucunRiZhi.setWuliaobianma(posunDetails.getWuliaobianma());
                    wuliaoKucunRiZhi.setDalei(posunDetails.getDalei());
                    wuliaoKucunRiZhi.setRukukufang(posunZong.getMorenkufang());
                    inSertRizhi += wuliaoKucunRiZhiMapper.insertSelective(wuliaoKucunRiZhi);
                }
            }else if (type.equals("weixiufu")){
                List<WeixiuDetails> weixiuDetailsList = weixiuDetailsMapper.listWeixiuDetailsByZongId(id);
                WeixiuZong weixiuZong = weixiuZongMapper.selectByPrimaryKey(id);
                for (WeixiuDetails weixiuDetails : weixiuDetailsList) {
                    i++;
                    WuliaoKucunRiZhi wuliaoKucunRiZhi = new WuliaoKucunRiZhi();
                    wuliaoKucunRiZhi.setMingchengguige(weixiuDetails.getMingchengguige());
                    wuliaoKucunRiZhi.setXiangmuweihu(weixiuZong.getXiangmumingcheng());
                    wuliaoKucunRiZhi.setWeixiushuliang(-weixiuDetails.getChukushuliang());
                    wuliaoKucunRiZhi.setDanwei(weixiuDetails.getDanwei());
                    wuliaoKucunRiZhi.setWuliaobianma(weixiuDetails.getWuliaobianma());
                    wuliaoKucunRiZhi.setDalei(weixiuDetails.getDalei());
                    wuliaoKucunRiZhi.setRukukufang(weixiuZong.getMorenkufang());
                    inSertRizhi += wuliaoKucunRiZhiMapper.insertSelective(wuliaoKucunRiZhi);
                }
            }
        }
        if ((i == inSertRizhi) && (inSertRizhi > 0)) {
            return inSertRizhi;
        } else if ((inSertRizhi > 0) && (i != inSertRizhi)) {
            return -1;
        } else {
            return 0;
        }
    }

    @Override
    @Transactional
    public int insertAndDelDaohuoShu(Integer[] ids, String type) {
        int inSertRizhi = 0;
        int i = 0;
        for (Integer id : ids) {
            if (type.equals("weixiudan")) {
                List<WeixiuDetails> weixiuDetailsList = weixiuDetailsMapper.listWeixiuDetailsByZongId(id);
                WeixiuZong weixiuZong = weixiuZongMapper.selectByPrimaryKey(id);
                for (WeixiuDetails weixiuDetails : weixiuDetailsList) {
                    i++;
                    WuliaoKucunRiZhi wuliaoKucunRiZhi = new WuliaoKucunRiZhi();
                    wuliaoKucunRiZhi.setMingchengguige(weixiuDetails.getMingchengguige());
                    wuliaoKucunRiZhi.setXiangmuweihu(weixiuZong.getXiangmumingcheng());
                    wuliaoKucunRiZhi.setShourushuliang(-weixiuDetails.getChukushuliang());
                    wuliaoKucunRiZhi.setDanwei(weixiuDetails.getDanwei());
                    wuliaoKucunRiZhi.setWuliaobianma(weixiuDetails.getWuliaobianma());
                    wuliaoKucunRiZhi.setDalei(weixiuDetails.getDalei());
                    wuliaoKucunRiZhi.setRukukufang(weixiuZong.getMorenkufang());
                    inSertRizhi += wuliaoKucunRiZhiMapper.insertSelective(wuliaoKucunRiZhi);
                }
            } else if (type.equals("posundan")) {
                List<PosunDetails> posunDetailsList = posunDetailsMapper.listPosunDetailsByZongId(id);
                PosunZong posunZong = posunZongMapper.selectByPrimaryKey(id);
                for (PosunDetails posunDetails : posunDetailsList) {
                    i++;
                    WuliaoKucunRiZhi wuliaoKucunRiZhi = new WuliaoKucunRiZhi();
                    wuliaoKucunRiZhi.setMingchengguige(posunDetails.getMingchengguige());
                    wuliaoKucunRiZhi.setXiangmuweihu(posunZong.getXiangmumingcheng());
                    wuliaoKucunRiZhi.setShourushuliang(posunDetails.getChukushuliang());
                    wuliaoKucunRiZhi.setDanwei(posunDetails.getDanwei());
                    wuliaoKucunRiZhi.setWuliaobianma(posunDetails.getWuliaobianma());
                    wuliaoKucunRiZhi.setDalei(posunDetails.getDalei());
                    wuliaoKucunRiZhi.setRukukufang(posunZong.getMorenkufang());
                    inSertRizhi += wuliaoKucunRiZhiMapper.insertSelective(wuliaoKucunRiZhi);
                }
            }else if(type.equals("yixiufu")){
                List<WeixiuDetails> weixiuDetailsList = weixiuDetailsMapper.listWeixiuDetailsByZongId(id);
                WeixiuZong weixiuZong = weixiuZongMapper.selectByPrimaryKey(id);
                for (WeixiuDetails weixiuDetails : weixiuDetailsList) {
                    i++;
                    WuliaoKucunRiZhi wuliaoKucunRiZhi = new WuliaoKucunRiZhi();
                    wuliaoKucunRiZhi.setMingchengguige(weixiuDetails.getMingchengguige());
                    wuliaoKucunRiZhi.setXiangmuweihu(weixiuZong.getXiangmumingcheng());
                    wuliaoKucunRiZhi.setWeixiushuliang(weixiuDetails.getChukushuliang());
                    wuliaoKucunRiZhi.setDanwei(weixiuDetails.getDanwei());
                    wuliaoKucunRiZhi.setWuliaobianma(weixiuDetails.getWuliaobianma());
                    wuliaoKucunRiZhi.setDalei(weixiuDetails.getDalei());
                    wuliaoKucunRiZhi.setRukukufang(weixiuZong.getMorenkufang());
                    inSertRizhi += wuliaoKucunRiZhiMapper.insertSelective(wuliaoKucunRiZhi);
                }
            }
        }
        if ((i == inSertRizhi) && (inSertRizhi > 0)) {
            return inSertRizhi;
        } else if ((inSertRizhi > 0) && (i != inSertRizhi)) {
            return -1;
        } else {
            return 0;
        }
    }

    @Override
    public WuliaoKucunRiZhi selectByPrimaryKey(Integer id) {
        return wuliaoKucunRiZhiMapper.selectByPrimaryKey(id);
    }

    @Override
    public int updateByPrimaryKeySelective(WuliaoKucunRiZhi wuliaoKucunRiZhi) {
        return wuliaoKucunRiZhiMapper.updateByPrimaryKeySelective(wuliaoKucunRiZhi);
    }

    @Override
    public int updateWuliaoRizhiJieyuShuliangByWuliaoName(String mingchengguige, String rukukufang) {
        return wuliaoKucunRiZhiMapper.updateWuliaoRizhiJieyuShuliangByWuliaoName(mingchengguige,rukukufang);
    }

    @Override
    public List<WuliaoKucunRiZhi> listKucunWithRiZhi(WuliaoKucunRiZhi wuliaoKucunRiZhi) {
        return wuliaoKucunRiZhiMapper.listKucunWithRiZhi(wuliaoKucunRiZhi);
    }

    @Override
    @Transactional
    public int insertButDeleteTuikuShu(Integer[] ids) {
        int inSertRizhi = 0;
        int i = 0;
        for (Integer id : ids) {
            List<TuikuDetails> tuikuDetailsList = tuikuDetailsMapper.listTuikuDetailsByZongId(id);
            TuikuZong tuikuZong = tuikuZongMapper.selectByPrimaryKey(id);
            for (TuikuDetails tuikuDetails : tuikuDetailsList) {
                i++;
                WuliaoKucunRiZhi wuliaoKucunRiZhi = new WuliaoKucunRiZhi();
                wuliaoKucunRiZhi.setMingchengguige(tuikuDetails.getMingchengguige());
                wuliaoKucunRiZhi.setXiangmuweihu(tuikuZong.getXiangmumingcheng());
                wuliaoKucunRiZhi.setTuihuishuliang(-tuikuDetails.getTuihuishuliang());
                wuliaoKucunRiZhi.setDanwei(tuikuDetails.getDanwei());
                wuliaoKucunRiZhi.setWuliaobianma(tuikuDetails.getWuliaobianma());
                wuliaoKucunRiZhi.setDalei(tuikuDetails.getDalei());
                //TODO 入库库房可能获取不到
                String rukukufang = tuikuDetails.getRukukufang();
                String rukukufang1 = tuikuZong.getRukukufang();
                if(StringUtil.isEmpty(rukukufang)){
                    wuliaoKucunRiZhi.setRukukufang(rukukufang1);
                }else{
                    wuliaoKucunRiZhi.setRukukufang(rukukufang);
                }
                inSertRizhi += wuliaoKucunRiZhiMapper.insertSelective(wuliaoKucunRiZhi);
            }
        }
        if ((i == inSertRizhi) && (inSertRizhi > 0)) {
            return inSertRizhi;
        } else if ((inSertRizhi > 0) && (i != inSertRizhi)) {
            return -1;
        } else {
            return 0;
        }
    }
}
